package com.ruoyi.shop.trade.mapper;

import java.util.Date;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Param;
import com.ruoyi.shop.trade.domain.ShopOrder;
import com.ruoyi.shop.trade.vo.ShopOrderVo;

/**
 * 商城订单Mapper接口
 * 
 * @author xuxiang
 * @date 2022-10-19
 */
public interface ShopOrderMapper {

	/**
	 * 查询商城订单
	 * 
	 * @param orderId 商城订单主键
	 * @return 商城订单
	 */
	public ShopOrder selectOrderById(Long orderId);

	/**
	 * 查询商城订单列表
	 * 
	 * @param shopOrder 商城订单
	 * @return 商城订单集合
	 */
	public List<ShopOrder> selectOrderList(ShopOrder shopOrder);

	/**
	 * 新增商城订单
	 * 
	 * @param shopOrder 商城订单
	 * @return 结果
	 */
	public int insertOrder(ShopOrder shopOrder);

	/**
	 * 修改商城订单
	 * 
	 * @param shopOrder 商城订单
	 * @return 结果
	 */
	public int updateOrder(ShopOrder shopOrder);

	/**
	 * 删除商城订单
	 * 
	 * @param orderId 商城订单主键
	 * @return 结果
	 */
	public int deleteOrderById(Long orderId);

	/**
	 * 批量删除商城订单
	 * 
	 * @param orderIds 需要删除的数据主键集合
	 * @return 结果
	 */
	public int deleteOrderByIds(String[] orderIds);

	/**
	 * 更新订单各种状态接口
	 * 
	 * @param shopOrder 商城订单
	 * @return 结果
	 */
	public int updateStatus(ShopOrder shopOrder);

	/**
	 * 查询会员订单列表
	 * 
	 * @param shopOrder 商城订单
	 * @return 商城订单集合
	 */
	public List<ShopOrder> queryOrderList(ShopOrder shopOrder);

	/**
	 * 查询失效订单
	 * 
	 * @param expireTime
	 * @param orderStatus
	 * @return
	 */
	public List<ShopOrder> queryExpireList(ShopOrderVo shopOrderVo);

	/**
	 * 查询最新订单流水号
	 * 
	 * @param orderNo
	 * @return
	 */
	public ShopOrder selectLastOrderNo(String orderNo);

	/**
	 * 根据支付流水号查询订单
	 * 
	 * @param outTradeNo
	 * @return
	 */
	public ShopOrder selectByOutTradeNo(String outTradeNo);

	/**
	 * 查询订单各状态及数量
	 * 
	 * @param status
	 * @return
	 */
	public int queryStatusCount(ShopOrder shopOrder);

	/**
	 * 按月查询交易量
	 * 
	 * @return
	 */
	public List<Map<String, Object>> queyTradeByMonth();

	/**
	 * 查询交易统计
	 * 
	 * @param date
	 * @return
	 */
	public Map<String, Object> queryTotalTrade(Date date);

	/**
	 * 查询会员消费次数
	 * 
	 * @param min 最小值
	 * @param max 最大值
	 * @return
	 */
	public int queryBuyCount(@Param("min") int min, @Param("max") int max);
}
